// PART OF THE MACHINE SIMULATION. DO NOT CHANGE.

package nachos.machine;

import java.io.EOFException;

/**
 * A file that supports reading, writing, and seeking.
 */
public class OpenFile
{
    /**
     * Allocate a new <tt>OpenFile</tt> object with the specified name on the
     * specified file system.
     *
     * @param    fileSystem    the file system to which this file belongs.
     * @param    name        the name of the file, on that file system.
     */
    public OpenFile(FileSystem fileSystem, String name)
    {
        this.fileSystem = fileSystem;
        this.name = name;
    }

    /**
     * Allocate a new unnamed <tt>OpenFile</tt> that is not associated with any
     * file system.
     */
    public OpenFile()
    {
        this(null, "unnamed");
    }

    /**
     * Get the file system to which this file belongs.
     *
     * @return the file system to which this file belongs.
     */
    public FileSystem getFileSystem()
    {
        return fileSystem;
    }

    /**
     * Get the name of this open file.
     *
     * @return the name of this open file.
     */
    public String getName()
    {
        return name;
    }

    /**
     * Read this file starting at the specified position and return the number
     * of bytes successfully read. If no bytes were read because of a fatal
     * error, returns -1
     *
     * @param    pos    the offset in the file at which to start reading.
     * @param    buf    the buffer to store the bytes in.
     * @param    offset    the offset in the buffer to start storing bytes.
     * @param    length    the number of bytes to read.
     * @return the actual number of bytes successfully read, or -1 on failure.
     */
    public int read(int pos, byte[] buf, int offset, int length)
    {
        return -1;
    }

    /**
     * Write this file starting at the specified position and return the number
     * of bytes successfully written. If no bytes were written because of a
     * fatal error, returns -1.
     *
     * @param    pos    the offset in the file at which to start writing.
     * @param    buf    the buffer to get the bytes from.
     * @param    offset    the offset in the buffer to start getting.
     * @param    length    the number of bytes to write.
     * @return the actual number of bytes successfully written, or -1 on
     * failure.
     */
    public int write(int pos, byte[] buf, int offset, int length)
    {
        return -1;
    }

    /**
     * Get the length of this file.
     *
     * @return the length of this file, or -1 if this file has no length.
     */
    public int length()
    {
        return -1;
    }

    /**
     * Close this file and release any associated system resources.
     */
    public void close()
    {
    }

    /**
     * Set the value of the current file pointer.
     */
    public void seek(int pos)
    {
    }

    /**
     * Get the value of the current file pointer, or -1 if this file has no
     * pointer.
     */
    public int tell()
    {
        return -1;
    }

    /**
     * Read this file starting at the current file pointer and return the
     * number of bytes successfully read. Advances the file pointer by this
     * amount. If no bytes could be* read because of a fatal error, returns -1.
     *
     * @param    buf    the buffer to store the bytes in.
     * @param    offset    the offset in the buffer to start storing bytes.
     * @param    length    the number of bytes to read.
     * @return the actual number of bytes successfully read, or -1 on failure.
     */
    public int read(byte[] buf, int offset, int length)
    {
        return -1;
    }

    /**
     * Write this file starting at the current file pointer and return the
     * number of bytes successfully written. Advances the file pointer by this
     * amount. If no bytes could be written because of a fatal error, returns
     * -1.
     *
     * @param    buf    the buffer to get the bytes from.
     * @param    offset    the offset in the buffer to start getting.
     * @param    length    the number of bytes to write.
     * @return the actual number of bytes successfully written, or -1 on
     * failure.
     */
    public int write(byte[] buf, int offset, int length)
    {
        return -1;
    }

    private FileSystem fileSystem;
    private String name;
}
